export default function filterRules(item) {
  // console.log(item)
  var rules = []
  if (item.required) {
    rules.push({
      required: true,
      message: '该输入项为必填项!',
      trigger: ['blur', 'change']
    })
  }
  if (item.maxLength) {
    rules.push({
      min: 1,
      max: item.maxLength,
      message: '最多输入' + item.maxLength + '个字符!',
      trigger: ['blur', 'change']
    })
  }
  if (item.min && item.max) {
    rules.push({
      min: item.min,
      max: item.max,
      message: '字符长度在' + item.min + '至' + item.max + '之间!',
      trigger: ['blur', 'change']
    })
  }
  if (item.length) {
    rules.push({
      min: item.length,
      max: item.length,
      message: '字符长度为' + item.length + '位!',
      trigger: ['blur', 'change']
    })
  }
  if (item.maxNumberLimit) {
    rules.push({
      validator: maxNumberLimit, trigger: ['blur', 'change']
    })
  }
  if (item.type) {
    var type = item.type
    switch (type) {
      case 'array':
        rules.push({
          type: 'array'
        })
        break;
      // 数字字母汉字
      case 'letterChineseNum':
        rules.push({
          validator: isvalidateLetterChineseNum, trigger: ['blur', 'change']
        })
        break
      // 车牌
      case 'vehicleNumber':
        rules.push({
          validator: isvalidateVehicleNumber, trigger: ['blur', 'change']
        })
        break
      // 电话号码
      case 'phoneNumber':
        rules.push({
          validator: isvalidatePhoneNumber, trigger: ['blur', 'change']
        })
        break
      // 开门电话
      case 'openPhoneNumber':
        rules.push({
          validator: isvalidateOpenPhoneNumber, trigger: ['blur', 'change']
        })
        break
      // 正整数
      case 'integer':
        rules.push({
          validator: isvalidateInteger, trigger: ['blur', 'change', 'fieldChange']
        })
        break
      // 整数
      case 'isIntegerAndNegative':
        rules.push({
          validator: isInteger_Negative, trigger: ['blur', 'change', 'fieldChange']
        })
        break
      // 非负整数
      case 'integerAndZero':
        rules.push({
          validator: isvalidateInteger_zero, trigger: ['blur', 'change', 'fieldChange']
        })
        break;
      // 大于0的数
      case 'graterThanZero':
        rules.push({
          validator: graterThanZero, trigger: ['blur', 'change', 'fieldChange']
        })
        break
      // 数字
      case 'isNum':
        rules.push({
          validator: isvalidateIsNum, trigger: ['blur', 'change', 'fieldChange']
        })
        break
      // 特殊字符
      case 'special':
        rules.push({
          validator: isvalidateSpecial, trigger: ['blur', 'change']
        })
        break
      // 证件号
      case 'idCardNumber':
        rules.push({
          validator: isvalidateIdCardNumber, trigger: ['blur', 'change']
        })
        break
      // 身份证
      case 'certificate':
        rules.push({
          validator: isvalidateCertificate, trigger: ['blur', 'change']
        })
        break
      // ip地址
      case 'ip':
        rules.push({
          validator: isvalidateIP, trigger: ['blur', 'change']
        })
        break
      // 数字和字母
      case 'numLetter':
        rules.push({
          validator: isvalidateNumLetter, trigger: ['blur', 'change']
        })
        break
      // 邮箱
      case 'email':
        rules.push({
          validator: isEmail, trigger: ['blur', 'change']
        })
        break
      // 邮箱
      case 'isNumber':
        rules.push({
          validator: isNumber, trigger: ['blur', 'change']
        })
        break
      // 邮箱
      case 'longitude':
        rules.push({
          validator: validateLongitude, trigger: ['blur', 'change']
        })
        break
      // 邮箱
      case 'latitude':
        rules.push({
          validator: validateLatitude, trigger: ['blur', 'change']
        })
        break
      default:
        rules.push({})
        break
    }
  }
  return rules
}

// 验证数字和字母
function isNumLetter(str) {
  var reg = /^[0-9a-zA-Z]+$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 验证数字
function isNum(str) {
  var reg = /^[0-9]*$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 验证正整数字
function isInteger(str) {
  var reg = /^[1-9]\d*$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 验证非负整数字
function isInteger_zero(str) {
  var reg = /^[0-9]\d*$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 验证整数字(包含负数)
function isIntegerNegative(str) {
  var reg = /^(0|[1-9][0-9]*|-[1-9][0-9]*)$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 验证汉字、字母
function isLetterChinese(str) {
  var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 车牌校验
function isVehicleNumber(vehicleNumber) {
  var reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[警京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{0,1}[A-Z0-9]{4,5}[A-Z0-9挂学警港澳]{1}$/
  var str = vehicleNumber
  if (!reg.test(str)) {
    return false
  } else {
    return true
  }
}

// 电话号码校验
function isPhoneNumber(str) {
  return /^\d{11}$/.test(str)
}

// 邮箱校验
function emailCheck(str) {
  return /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(str)
}

// 数字 包含小数
function checkNumber(str) {
  return /^\d+(?=\.{0,1}\d+$|$)/.test(str)
}

// 开门电话校验(最大数15位，可以使用 “-” 符号，只能为数字)
function isOpenPhoneNumber(str) {
  return /^\d{1,15}[-]?\d{1,14}$/.test(str)
}

function checkLongitude(str) {
  // 经度,整数部分为0-180小数部分为0到15位
  return /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,15})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,15}|180)$/.test(str)
}
function checkLatitude(str) {
  // 纬度,整数部分为0-90小数部分为0到15位
  return /^(\-|\+)?([0-8]?\d{1}\.\d{0,15}|90\.0{0,15}|[0-8]?\d{1}|90)$/.test(str)
}

// 特殊字符校验
function isSpecial(str) {
  var reg = RegExp(/[(\ )(\@)(\!)(\~)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/)
  var regChinese = RegExp(/[(！)(￥)(%)(……)(&)(*)(（)(）)(——)(｛)(｝)(【)(】)(；)(‘)(’)(：)(，)(。)(、)(？)(|)(、)]+/)
  if (!reg.test(str) && !regChinese.test(str)) {
    return false
  } else {
    return true
  }
}

function isvalidateInteger(rule, value, callback) {
  if (value !== undefined && value !== null && value !== '') {
    if (!isInteger(value)) {
      callback(new Error('请输入正整数字!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function isvalidateInteger_zero(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isInteger_zero(value)) {
      callback(new Error('请输入非负整数字!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function graterThanZero(rule, value, callback) {
  if (value === null || value === undefined) {
    callback();
    return;
  }
  if (value < 1) {
    callback(new Error('请输入大于0的数!'))
  } else {
    callback()
  }
}

function isInteger_Negative(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isIntegerNegative(value)) {
      callback(new Error('请输入整数!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function isvalidateIsNum(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isNum(value)) {
      callback(new Error('请输入数字!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function isvalidateSpecial(rule, value, callback) {
  if (value !== null && value !== '') {
    if (isSpecial(value)) {
      callback(new Error('请勿输入特殊字符!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function isvalidateVehicleNumber(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isVehicleNumber(value)) {
      callback(new Error('请输入正确的车牌!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

function isvalidateLetterChineseNum(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isLetterChinese(value)) {
      callback(new Error('请输入数字,中文或字母!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

/**
 * 判断是否只含有数字和字母
 * @param rule
 * @param value
 * @param callback
 */
function isvalidateNumLetter(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isNumLetter(value)) {
      callback(new Error('请输入数字或字母!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
function isvalidatePhoneNumber(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isPhoneNumber(value)) {
      callback(new Error('请输入正确的电话!'))
    } else {
      callback()
    }
  }
  callback()
}
function isvalidateOpenPhoneNumber(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!isOpenPhoneNumber(value)) {
      callback(new Error('请输入正确的电话!'))
    } else {
      callback()
    }
  }
  callback()
}
function isvalidateIdCardNumber(rule, value, callback) {
  // 如果包含非字母和数字的字符就提示错误
  if (/[^a-zA-Z0-9]/.test(value)) {
    callback(new Error('请输入正确的证件号码!'))
  }
  callback()
}

/**
 * 身份证号码校验
 * 1.15位或18位
 * 2.身份证正则
 * @param rule
 * @param value
 * @param callback
 */
function isvalidateCertificate(rule, value, callback) {
  if (value.length !== 15 && value.length !== 18) {
    callback(new Error('请输入15位或18位的身份证号码!'))
  }
  if (!/^\d{6}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}(\d|X|x)$/i.test(value)) {
    callback(new Error('请输入正确的身份证号码!'))
  }
  callback()
}

/*
 * ip地址校验
 * */
function isvalidateIP(rule, value, callback) {
  if (!(/^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/.test(value))) {
    callback(new Error('请输入正确的IP地址!'))
  }
  callback()
}

function isEmail(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!emailCheck(value)) {
      callback(new Error('请输入正确的邮箱!'))
    } else {
      callback()
    }
  }
  callback()
}

function isNumber(rule, value, callback) {
  if (value !== null && value !== '') {
    if (!checkNumber(value)) {
      callback(new Error('请输入正确的数字!'))
    } else {
      callback()
    }
  }
  callback()
}

function maxNumberLimit(rule, value, callback) {
  if (!value) {
    callback();
  }
  if (value > 9999999) {
    callback(new Error('请输入正确的数字!'))
  }
  callback();
}

function validateLongitude(rule, value, callback) {
  if (!value) {
    callback();
  }
  if (!checkLongitude(value)) {
    callback(new Error('经度格式错误,整数部分为0-180'))
  } else {
    callback()
  }
  callback();
}

function validateLatitude(rule, value, callback) {
  if (!value) {
    callback();
  }
  if (!checkLatitude(value)) {
    callback(new Error('纬度格式错误,整数部分为0-90'))
  } else {
    callback()
  }
  callback();
}
